package com.holly.unit.deform.api;

import com.alibaba.fastjson.JSONObject;
import com.holly.unit.db.api.pojo.page.PageResult;
import com.holly.unit.deform.api.pojo.base.DesignFormDTO;
import com.holly.unit.deform.api.pojo.online.pojo.DesignFormDataPojo;
import com.holly.unit.deform.api.pojo.rsp.DeformResult;

import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 接口描述: 表单设计数据 API
 *
 * @author fxr
 * @version 1.0.0
 * @date 2022/4/2 10:01
 */
public interface DeformDataApi<T> {

    /***
     * 批量保存导入的数据
     * @param designFormDTO
     * @param entityList
     * @param token
     * @return
     */
    boolean saveBatchDataByImport(DesignFormDTO designFormDTO, Collection<JSONObject> entityList, String token);

    /***
     * 根据高级查询条件查询数据（分页）
     * @param desformCode
     * @param pageNo
     * @param pageSize
     * @param paramMap
     * @param superQuery
     * @param username
     * @return
     * @throws UnsupportedEncodingException
     */
    DeformResult<PageResult<T>> queryPage(T designFormData,
                              String desformCode,
                              int pageNo,
                              int pageSize,
                              Map<String, String[]> paramMap,
                              String superQuery,
                              String username) throws UnsupportedEncodingException;

    /***
     * 根据高级查询条件查询数据（不分页）
     * @param desformCode
     * @param paramMap
     * @param superQuery
     * @param username
     * @return
     * @throws UnsupportedEncodingException
     */
    DeformResult<List<T>> queryList(T designFormData,String desformCode, Map<String, String[]> paramMap, String superQuery, String username) throws UnsupportedEncodingException;

    /***
     * 通过主表ID查询数据
     * @param mainId
     * @return
     */
    List<T> selectByMainId(String mainId);

    /**
     * 新增一条数据
     *
     * @param t
     * @return
     */
    DeformResult addOne(T t);

    /**
     * 修改一条数据
     *
     * @param t
     * @return
     */
    DeformResult editOne(T t);

    /**
     * 删除一条数据
     *
     * @param id
     * @return
     */
    DeformResult deleteOne(String id, String token);

    /**
     * 删除一条数据
     *
     * @param t
     * @return
     */
    DeformResult deleteOne(T t, String token);

    /**
     * 通过主表ID删除数据
     *
     * @param asList
     */
    void deleteBatchMain(List<String> asList, String token);


    /***
     * 通过ID查询数据对象
     * @param id
     * @return
     */
    T getById(String id);


    /***
     * 外部链接新增接口，不需要Token验证
     * @param desformCode
     * @param t
     * @return
     */
    DeformResult extAdd(String desformCode, T t);

    /***
     * 外部链接修改接口，不需要Token验证
     * @param desformCode
     * @param t
     * @return
     */
    DeformResult extEdit(String desformCode,T t);


    DeformResult addFormData(DesignFormDataPojo designFormData);

    DeformResult queryFormDataList(DesignFormDataPojo designFormData);

    DeformResult delFormData(DesignFormDataPojo designFormData);

    DeformResult editFormData(DesignFormDataPojo designFormData);

    void deleteBatchForm(List<String> asList, String tableName);
}
